package com.example.itcacp.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import jakarta.persistence.*;
import lombok.Data;
import java.time.LocalDateTime;

/**
 *
 * 用户实体类
 * @author Jiuuan
 * */
@Data
@TableName("it_user")    // 指定类和数据库表的映射关系。类名与表名相同时，可不使用该注解
public class User {
    @TableId(type = IdType.AUTO)  //表示这个字段对应数据库表的主键。相同时mp自动关联
    @JsonSerialize(using = ToStringSerializer.class)  // 使用ToStringSerializer将Long类型序列化为字符串:解决数据为Long型，返回给浏览器以后，浏览器转换数据格式的时候出现问题
    private Long user_id;
    private String username;
    private String email;
    private String password;
    private String phone;
    private String profile_photo_path;
    private long role_id;
    private String tags;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime created_at;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updated_at;
    /*
    @TableField(exist = false)
    排除非表字段
    若Java实体类中某个字段，不对应表中的任何列，它只是用于保存一些额外的，或组装后的数据，则可以设置exist属性为false，这样在对实体对象进行插入时，会忽略这个字段
     // 关联角色信息
     */
    @TableField(exist = false)
    private Role role;
    @TableField(exist = false)
    private String token;
}
